package JavaSE.CODE.javaNet.File;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

/**
 * 传送文件
 */
public class TcpClientDemo {
    public static void main(String[] args) throws Exception {
        //创建一个Socket连接
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
        //创建一个输出流：输出给服务器
        OutputStream outputStream = socket.getOutputStream();
        //创建一个输入流，读取文件
        FileInputStream fileInputStream = new FileInputStream("test.txt");//设置文件路径
        //将文件内容读入缓冲区中，再把缓冲区的东西给发出去
            //在这里就理解了为什么报文段是一段一段发送的，因为buffer读不完啊
        byte[] buffer = new byte[1024];
        int len;
        while((len=fileInputStream.read(buffer))>0){
            outputStream.write(buffer,0,len);
        }

        //通知服务器我已经发送完了！相当于关闭套接管？？
        socket.shutdownOutput();


        //确定服务器接收完毕才可以关闭
        //TCP里面的流程原来真的是可以实现的

        InputStream inputStream = socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        byte[] buffer2 = new byte[1024];
        int len2;
        while((len2 = inputStream.read(buffer))>0){
            baos.write(buffer2,0,len2);//不打印，只做连接
        }
        System.out.println(baos.toString());

        //5、关闭资源
        fileInputStream.close();
        outputStream.close();
        socket.close();

    }
}
